import config1 from '@/config';
/**
 * 请求配置
 */
const config = {
	baseUrl: config1.baseUrl,
	timeout: 10000,
};

// 请求拦截器
const requestInterceptor = (options) => {
	options.header = {
		...config.header,
		...options.header,
	};
	// const userid = uni.getStorageSync('userid');
	// const token = uni.getStorageSync('tokenid');
	// const share_userid = uni.getStorageSync('share_userid');
	// if (userid && token) {
	// 	options.header.Authorization = md5(userid + token.slice(0, 8));
	// 	options.data.verifyinfo = { UserID: userid };
	// }
	// options.data.share_userid = share_userid ? share_userid : '';
	if (!options.url.startsWith('http')) {
		options.url = config.baseUrl + options.url;
	}
	return options;
};

// 响应拦截器
const responseInterceptor = async (response) => {
	const { statusCode, data } = response;
	// // 如果登录状态未新用户，则跳转到首页注册新用户
	// if (data.status == 400) {
	// 	// 清除token和userid
	// 	uni.removeStorageSync('tokenid');
	// 	uni.removeStorageSync('userid');
	// 	uni.switchTab({ url: '/pages/tabbar/home/index' });
	// 	return;
	// }

	// // 请求成功
	// if (statusCode >= 200 && statusCode < 300) {
	// 	return data;
	// }

	// 处理401未授权
	// if (statusCode === 401) {
	// 	const userStore = useUserStore();

	// 	// 如果没有refreshToken，直接退出登录
	// 	if (!userStore.refreshToken) {
	// 		userStore.logout();
	// 		uni.showToast({
	// 			title: '登录已过期，请重新登录',
	// 			icon: 'none',
	// 		});
	// 		setTimeout(() => {
	// 			uni.navigateTo({
	// 				url: '/pages/login/index',
	// 			});
	// 		}, 1500);
	// 		return Promise.reject(new Error('登录已过期'));
	// 	}

	// 	// 如果正在刷新token，将请求加入重试队列
	// 	if (isRefreshing) {
	// 		return new Promise((resolve) => {
	// 			retryRequests.push((token) => {
	// 				response.config.header.Authorization = `Bearer ${token}`;
	// 				resolve(request(response.config));
	// 			});
	// 		});
	// 	}

	// 	isRefreshing = true;

	// 	try {
	// 		// 刷新token
	// 		const newToken = await userStore.refreshTokenAction();
	// 		// 重试队列中的请求
	// 		retryRequests.forEach((callback) => callback(newToken));
	// 		retryRequests = [];
	// 		// 重试当前请求
	// 		response.config.header.Authorization = `Bearer ${newToken}`;
	// 		return request(response.config);
	// 	} catch (error) {
	// 		userStore.logout();
	// 		uni.showToast({
	// 			title: '登录已过期，请重新登录',
	// 			icon: 'none',
	// 		});
	// 		setTimeout(() => {
	// 			uni.navigateTo({
	// 				url: '/pages/login/index',
	// 			});
	// 		}, 1500);
	// 		return Promise.reject(error);
	// 	} finally {
	// 		isRefreshing = false;
	// 	}
	// }

	// 处理其他错误
	const error = new Error(data.message || '请求失败');
	error.response = response;
	throw error;
};

// 错误处理
const errorHandler = (error) => {
	// 处理网络错误
	if (error.errMsg) {
		uni.showToast({
			title: '网络异常，请稍后重试',
			icon: 'none',
		});
		return Promise.reject(error);
	}

	// 处理业务错误
	const { response } = error;
	if (response) {
		const { statusCode, data } = response;

		// 显示错误信息
		uni.showToast({
			title: data.message || '请求失败',
			icon: 'none',
		});
	}

	return Promise.reject(error);
};

const request = (
	options = {
		method: 'GET',
		url: '',
		data: {},
		showLoading: true,
		// loadingText: '加载中...',
	}
) => {
	// 合并配置
	options = {
		...config,
		...options,
	};

	// 请求拦截
	options = requestInterceptor(options);

	// 显示loading
	const showLoading = options.showLoading !== false;
	if (showLoading) {
		uni.showLoading({
			title: options.loadingText || '加载中...',
			mask: true,
		});
	}

	// 发起请求
	return new Promise((resolve, reject) => {
		uni.request({
			...options,
			success: async (res) => {
				const data = await responseInterceptor(res);
				resolve(data);
			},
			fail: (error) => {
				errorHandler(error);
				reject(error);
			},
			complete: () => {
				// 隐藏loading
				if (showLoading) {
					uni.hideLoading();
				}
			},
		});
	});
};

export default request;
